// The follow code is a memory manager Function

// (miniOS_memory.c) and Header file(miniOS_memory.h).

miniOS_memory.h

#ifndef _MINI_MEM

#define _MINI_MEM

#define MAXMEMBLK 40 typedef struct _mini_free_memory{

unsigned int block_start_address;

unsignrd int block_end_address;

int usedaddress;

}Mini_free_memory;

typedef struct _mini_memory_manage{

Mini_free_memory free_memory_pool[MAXMEMBLK];

void (*init)(void);

unsigned int allocation(void);

}Mini_memory_manage;

void memory_init(void);

unsigned int memory_allocation(void);

#endif miniOS_memory.c

#include

Mini_memory_manage  memory_manage;

#define STARTUSRSTACKADDR  0xA0400000

#define USRSTACKSIZE       0x00100000 unsigned int memory_allocation(void)

{

int i;

for(i=0; i< MAXMEMBLK; i++)

{

if(memory_manage.free_memory_pool[i].usedaddress == 0)

{

memory_manage.free_memory_pool[i].usedaddress = 1;

return memory_manage.free_memory_pool[i].

block_end_address;

}

}

return 0;

}

void memory_init(void)

{

unsigned int pointer = STARTUSRSTACKADDR;

int i;

for(i=0; i< MAXMEMBLK; i++)

{

memory_manage.free_memory_pool[i].block_start_address

= pointer;

memory_manage.free_memory_pool[i].block_end_address

= pointer+USRSTACKSIZE - 4;

memory_manage.free_memory_pool[i].usedaddress = 0;

pointer += USRSTACKSIZE;

}

memory_manage.init = memory_init;

memory_manage.allocation = memory_allocation;

}